package com.pdf.controller;

import com.pdf.dataObject.Pdf;
import com.pdf.service.PdfService;
import com.pdf.utils.TimeUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

/*
 *@ClassName: UserController
 *@Description: TODO
 *@author: 郑波
 *@date: 2019-04-13 7:49
 *@version: 1.0
 */
@RestController
public class UserController {
    @Autowired
    private PdfService pdfService;

    @RequestMapping("/record")
    public void addRecord(HttpServletRequest request, Integer nowpage){
        String ip = null;
        //X-Forwarded-For：Squid 服务代理
        String ipAddresses = request.getHeader("X-Forwarded-For");
        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
            //Proxy-Client-IP：apache 服务代理
            ipAddresses = request.getHeader("Proxy-Client-IP");
        }
        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
            //WL-Proxy-Client-IP：weblogic 服务代理
            ipAddresses = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
            //HTTP_CLIENT_IP：有些代理服务器
            ipAddresses = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
            //X-Real-IP：nginx服务代理
            ipAddresses = request.getHeader("X-Real-IP");
        }
        //有些网络通过多层代理，那么获取到的ip就会有多个，一般都是通过逗号（,）分割开来，并且第一个ip为客户端的真实IP
        if (ipAddresses != null && ipAddresses.length() != 0) {
            ip = ipAddresses.split(",")[0];
        }
        //还是不能获取到，最后再通过request.getRemoteAddr();获取
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
            ip = request.getRemoteAddr();
        }
        //System.out.println(ip);
        Cookie[] cookies = request.getCookies();
        if (cookies==null){
            return;
        }
        String MdPdfName=null;
        String userUid=null;
        for (Cookie cookie:cookies){
            if (cookie.getName().equals("userUid")){
                userUid=cookie.getValue();
            }else if (cookie.getName().equals("MdPdfName")){
                MdPdfName=cookie.getValue();
            }
        }
        if (userUid==null){
            return;
        }
        //System.out.println(nowpage);
        Pdf oldPdf = pdfService.getByUserUidAndAndFileName(userUid, MdPdfName);
        Pdf newPdf=new Pdf();
        if (oldPdf!=null){
            BeanUtils.copyProperties(oldPdf,newPdf);
        }else{
            newPdf.setFileUid(TimeUtil.getCurSecond()+MdPdfName);
            newPdf.setUserUid(userUid);
            newPdf.setFirstTime(TimeUtil.getCurTime());
            newPdf.setFileName(MdPdfName);
        }
        newPdf.setLastTime(TimeUtil.getCurTime());
        newPdf.setIp(ip);
        newPdf.setLastPage(nowpage);
        pdfService.update(newPdf);
        System.out.println(nowpage);
    }
}
